package com.lib.framework.base

import androidx.multidex.MultiDexApplication
import com.facebook.stetho.Stetho
import com.lib.framework.BuildConfig
import com.lib.framework.manager.ContextManager
import com.lib.framework.manager.ForegroundBackgroundManager
import com.lib.framework.manager.RunningActivityManager
import com.lib.framework.utils.AndroidUtil


/**
 * 项目的 Application 基类，能放在 入口页面初始化的数据，就不要放在 Application 中，能在线程中初始化的数据，就不要放在主线程中。
 *
 * @author keanbin
 */
abstract class BaseApplication : MultiDexApplication() {

    companion object {
        private const val TAG = "BaseApplication"
    }

    override fun onCreate() {
        super.onCreate()

        initAppData()
    }

    /**
     * 初始化应用数据
     */
    private fun initAppData() {
        initInAllProcess()

        if (AndroidUtil.isMainProcess(this)) {
            initOnlyInMainProcess()
        }
    }


    /**
     * 只在主进程初始化
     */
    protected open fun initOnlyInMainProcess() {
        if (BuildConfig.DEBUG) {
            Stetho.initializeWithDefaults(this)
        }

        RunningActivityManager.init(this)
        ForegroundBackgroundManager.init(this)
    }

    /**
     * 在所有进程都需要的初始化
     */
    protected open fun initInAllProcess() {
        ContextManager.registerActivityLifecycleCallbacks(this)
    }
}